#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//int main() {
//	int n = 0;
//	int m = 0;
//	scanf("%d %d", &n, &m);
//	int arr1[1000] = { 0 };
//	int arr2[1000] = { 0 };
//	int i = 0;
//	for (i = 0; i <n; i++)
//	{
//		scanf("%d ", &arr1[i]);
//	}
//	for (i = 0; i < m; i++)
//	{
//		scanf("%d ", &arr2[i]);
//	}
//	i = 0;
//	int j = 0;
//	while (i < n && j < m) {
//		if (arr1[i]<arr2[j])
//		{
//			printf("%d ", arr1[i]);
//			i++;
//		}
//		else
//		{
//			printf("%d ", arr2[j]);
//			j++;
//		}
//	}
//	int z = 0;
//	if (i==n)
//	{
//		for (z = j; z < m; z++) {
//			printf("%d ", arr2[z]);
//		}
//	}
//	if (j==m)
//	{
//		for (z = i; z < n; z++) {
//			printf("%d ", arr1[z]);
//		}
//	}
//	return 0;
//}


//int main() {
//	int a = 0;
//	int arr[50] = { 0 };
//	scanf("%d", &a);
//	int i = 0;
//	for (i = 0; i < a; i++) {
//		scanf("%d ", &arr[i]);
//	}
//	int flag1 = 1;
//	for (i = 1; i < a; i++) {
//		if (arr[i - 1] <= arr[i])
//		{
//			flag1 = 0;
//		}
//	}
//	int flag2 = 1;
//	for (i = 1; i < a; i++) {
//		if (arr[i - 1] > arr[i])
//		{
//			flag2 = 0;
//		}
//	}
//	if (flag1 + flag2 == 1)
//	{
//		printf("sorted");
//	}
//	else {
//		printf("unsorted");
//	}
//	return 0;
//}

//int main()
//{
//	int n = 0;
//	int arr[50] = { 0 };
//	scanf("%d", &n);
//	int i = 0;
//	int flag1 = 0;
//	int flag2 = 0;
//	for (i = 0; i < n; i++)
//	{
//		scanf("%d", &arr[i]);
//		if (i > 0)
//		{
//			if (arr[i] > arr[i - 1])
//				flag1 = 1;
//			else if (arr[i] < arr[i - 1])
//				flag2 = 1;
//		}
//	}
//
//	if (flag1 + flag2 > 1)
//		printf("unsorted\n");
//	else
//		printf("sorted\n");
//	return 0;
//}

int main() {
	int a = 0;
	int b = 0;
	int arr[12] = { 31,28,31,30,31,30,31,31,30.31,30,31 };
	scanf("%d %d", &a, &b);
	int flag = 0;
	if ((a % 4 == 0) && (a % 100 != 0) || (a % 400 == 0)) {
		flag = 1;
	}
	if (flag==1)
	{
		arr[1] += 1;
	}
	printf("%d", arr[b-1]);
	return 0;
}